package main

import (
	"fmt"
	"lnzw/engine/actor"
	"lnzw/engine/log"
	"time"
)

// 玩家别名
var PlayerCatalog = "player"

type PlayerMapping struct {
}

func (p *PlayerMapping) Handle(msg actor.Msg) {

}

// 玩家结构体
type Player struct {
	actor.DefaultActor
	PlayerMapping
	Id string //玩家唯一id
}

// 异步玩家处理函数
// func (p *Player) Handle(msg actor.Msg) {
// 	data := string(msg.Data)
// 	// 1111收到启动跟2222开始通讯的消息
// 	if data == "start" && msg.SourceId == "" {
// 		actor.Send("1111", "2222", []byte("hello i am "+p.Id))
// 	} else {
// 		time.Sleep(2 * time.Second)
// 		// 1111和2222之间互相通讯消息
// 		actor.Send(p.ActorId(), string(msg.SourceId), []byte("hello i am "+p.Id))
// 	}
// }

// 同步玩家处理函数
// func (p *Player) Handle(msg actor.Msg) {
// 	data := string(msg.Data)
// 	// 1111收到启动跟2222开始通讯的消息
// 	if data == "start" && msg.SourceId == "" {
// 		for {
// 			msg, err := actor.SyncSend("1111", "2222", []byte("hello i am "+p.Id))
// 			if err != nil {
// 				log.Error("actor.SyncSend error", err)
// 			} else {
// 				fmt.Println("1111收到2222的回复：", string(msg.Data))
// 			}
// 		}
// 	} else {
// 		p.chat(msg)
// 	}
// }

// func (p *Player) chat(msg actor.Msg) {
// 	// 1111和2222之间互相通讯消息
// 	time.Sleep(time.Second * time.Duration(math.RandBetween(1, 10)))
// 	fmt.Printf("%s收到%s的回复：%s\n", p.ActorId(), msg.SourceId, string(msg.Data))
// 	rsp := p.GetRsp()
// 	rsp.Data = []byte("hello i am " + p.Id)
// 	// msg, err := actor.SyncSend(p.ActorId(), string(msg.SourceId), []byte("hello i am "+p.Id))
// 	// if err != nil {
// 	// 	log.Error("actor.SyncSend error", err)
// 	// } else {
// 	// 	fmt.Println("2222收到1111的回复：", string(msg.Data))
// 	// }
// }

// 创建player的模板函数
func NewPlayer() actor.IActor {
	return &Player{}
}

func main() {
	log.Setup()
	// 注册player模板
	actor.RegisterActor(PlayerCatalog, NewPlayer)
	//启动1个actorId是1111的player
	ac1 := actor.StartActor(PlayerCatalog, "1111")
	ac1.(*Player).Id = "1"
	//启动1个actorId是2222的player
	ac2 := actor.StartActor(PlayerCatalog, "2222")
	ac2.(*Player).Id = "2"
	time.Sleep(5 * time.Second)
	fmt.Println("start")
	//发送消息给1111的player，可以开始跟2222互相发送消息了
	actor.Send("", "1111", []byte("start"))
	time.Sleep(time.Hour)
}
